package com.sheng.leetcode.year2023.month07.day05;

import org.junit.Test;

/**
 * @author liusheng
 * @date 2023/07/05
 * <p>
 * 2600. K 件物品的最大和<p>
 * <p>
 * 袋子中装有一些物品，每个物品上都标记着数字 1 、0 或 -1 。<p>
 * 给你四个非负整数 numOnes 、numZeros 、numNegOnes 和 k 。<p>
 * 袋子最初包含：<p>
 * numOnes 件标记为 1 的物品。<p>
 * numZeroes 件标记为 0 的物品。<p>
 * numNegOnes 件标记为 -1 的物品。<p>
 * 现计划从这些物品中恰好选出 k 件物品。返回所有可行方案中，物品上所标记数字之和的最大值。<p>
 * <p>
 * 示例 1：<p>
 * 输入：numOnes = 3, numZeros = 2, numNegOnes = 0, k = 2<p>
 * 输出：2<p>
 * 解释：袋子中的物品分别标记为 {1, 1, 1, 0, 0} 。取 2 件标记为 1 的物品，得到的数字之和为 2 。<p>
 * 可以证明 2 是所有可行方案中的最大值。<p>
 * <p>
 * 示例 2：<p>
 * 输入：numOnes = 3, numZeros = 2, numNegOnes = 0, k = 4<p>
 * 输出：3<p>
 * 解释：袋子中的物品分别标记为 {1, 1, 1, 0, 0} 。取 3 件标记为 1 的物品，1 件标记为 0 的物品，得到的数字之和为 3 。<p>
 * 可以证明 3 是所有可行方案中的最大值。<p>
 * <p>
 * 提示：<p>
 * 0 <= numOnes, numZeros, numNegOnes <= 50<p>
 * 0 <= k <= numOnes + numZeros + numNegOnes<p>
 * <p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/k-items-with-the-maximum-sum">2600. K 件物品的最大和</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class LeetCode2600 {

    @Test
    public void test01() {
//        int numOnes = 3, numZeros = 2, numNegOnes = 0, k = 2;
//        int numOnes = 3, numZeros = 2, numNegOnes = 0, k = 4;
        int numOnes = 6, numZeros = 6, numNegOnes = 6, k = 13;
        System.out.println(new Solution().kItemsWithMaximumSum(numOnes, numZeros, numNegOnes, k));
    }
}

class Solution {
    public int kItemsWithMaximumSum(int numOnes, int numZeros, int numNegOnes, int k) {
        if (k <= numOnes) {
            return k;
        } else if (k <= numOnes + numZeros) {
            return numOnes;
        } else {
            return 2 * numOnes + numZeros - k;
        }
    }
}
